import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CfuntionUtil {

	private static boolean check(int[] i, int x, int d) throws Exception {
		int firstCount = 10;
		int firstCountDeal = 10;
		int count = 10;
		int countDeal = 10;
		if (i[0] < 10) {
			count = count + i[0];
			firstCount = firstCount + i[0];
		}
		if (i[1] < 10) {
			count = count + i[1];
			firstCount = firstCount + i[1];
		}

		Integer p3 = null;
		Integer p6 = null;

		if (i[2] < 10) {
			countDeal = countDeal + i[2];
			firstCountDeal = firstCountDeal + i[2];
		}
		if (i[3] < 10) {
			countDeal = countDeal + i[3];
			firstCountDeal = firstCountDeal + i[3];
		}

		if ((count % 10 >= 8) || (countDeal % 10 >= 8)) {

		} else {
			if (count % 10 <= 5) {
				p3 = i[4];

				if (p3 < 10) {
					count = count + p3;
				}

				if (countDeal % 10 <= 2) {
					p6 = i[5];
				} else if (countDeal % 10 == 3) {
					if (p3 != 8) {
						p6 = i[5];
					}
				} else if (countDeal % 10 == 4) {
					if (p3 != 1 && p3 != 8 && p3 != 9 && p3 != 10 && p3 != 11
							&& p3 != 12 && p3 != 13) {
						p6 = i[5];
					}
				} else if (countDeal % 10 == 5) {
					if (p3 == 4 || p3 == 5 || p3 == 6 || p3 == 7) {
						p6 = i[5];
					}
				} else if (countDeal % 10 == 6) {
					if (p3 == 6 || p3 == 7) {
						p6 = i[5];
					}
				} else if (countDeal % 10 == 7) {

				}
				if (p6 != null && p6 < 10) {
					countDeal = countDeal + p6;
				}

			} else if (count % 10 == 6 || count % 10 == 7) {

				if (countDeal % 10 <= 5) {
					p6 = i[5];

					if (p6 < 10) {
						countDeal = countDeal + p6;
					}
				}

			} else {

			}

		}

		if (x == count % 10 && d == countDeal % 10) {
			return true;
		} else {
			throw new Exception("err");
		}

	}

	public static void main(String[] args) throws Exception {

		//
		// System.out.println(c(52, 6));
		// System.out.println((new BigInteger(String.valueOf(50 * 49 * 48 *
		// 47)))
		// .multiply(new BigInteger("256")).multiply(new BigInteger("5")));
		//
		// System.out.println((new BigInteger(String.valueOf(50 * 49 * 48 *
		// 47)))
		// .multiply(new BigInteger("248")).multiply(new BigInteger("4")));
		// System.out.println((new BigInteger(String.valueOf(50 * 49 * 48 *
		// 47)))
		// .multiply(new BigInteger("380")));
		Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();

		for (int i = 0; i < 10; i++) {
			for (int j = 0; j < 10; j++) {
				map.put(i + "," + j, new ArrayList<Integer>());
			}
		}

		
		
		for (int i = 1; i < 11; i++) {
			for (int j = 1; j < 11; j++) {
				for (int k = 1; k < 11; k++) {
					for (int l = 1; l < 11; l++) {
						for (int m = 1; m < 11; m++) {
							for (int n = 1; n < 11; n++) {
								if ((i + j) % 10 <= 5) {
									if ((k + l) % 10 <= 2) {
										String s = ((i + j + m) % 10) + ","
												+ ((k + l + n) % 10);
										List list = map.get(s);
										list.add(i);
										list.add(j);
										list.add(k);
										list.add(l);
										list.add(m);
										list.add(n);

									} else if ((k + l) % 10 == 3) {
										if (m == 8) {
											String s = ((i + j + m) % 10) + ","
													+ ((k + l) % 10);
											List list = map.get(s);

											list.add(i);
											list.add(j);
											list.add(k);
											list.add(l);
											list.add(m);
											list.add(n);
										} else {
											String s = ((i + j + m) % 10) + ","
													+ ((k + l + n) % 10);
											List list = map.get(s);

											list.add(i);
											list.add(j);
											list.add(k);
											list.add(l);
											list.add(m);
											list.add(n);

										}
									} else if ((k + l) % 10 == 4) {
										if (m == 8 || m == 1 || m == 9
												|| m == 10) {
											String s = ((i + j + m) % 10) + ","
													+ ((k + l) % 10);
											List list = map.get(s);

											list.add(i);
											list.add(j);
											list.add(k);
											list.add(l);
											list.add(m);
											list.add(n);
										} else {
											String s = ((i + j + m) % 10) + ","
													+ ((k + l + n) % 10);
											List list = map.get(s);

											list.add(i);
											list.add(j);
											list.add(k);
											list.add(l);
											list.add(m);
											list.add(n);

										}
									} else if ((k + l) % 10 == 5) {
										if (m == 8 || m == 1 || m == 2
												|| m == 3 || m == 9 || m == 10) {
											String s = ((i + j + m) % 10) + ","
													+ ((k + l) % 10);
											List list = map.get(s);

											list.add(i);
											list.add(j);
											list.add(k);
											list.add(l);
											list.add(m);
											list.add(n);
										} else {
											String s = ((i + j + m) % 10) + ","
													+ ((k + l + n) % 10);
											List list = map.get(s);

											list.add(i);
											list.add(j);
											list.add(k);
											list.add(l);
											list.add(m);
											list.add(n);

										}
									} else if ((k + l) % 10 == 6) {
										if (m == 6 || m == 7) {
											String s = ((i + j + m) % 10) + ","
													+ ((k + l + n) % 10);
											List list = map.get(s);

											list.add(i);
											list.add(j);
											list.add(k);
											list.add(l);
											list.add(m);
											list.add(n);
										} else {
											String s = ((i + j + m) % 10) + ","
													+ ((k + l) % 10);
											List list = map.get(s);

											list.add(i);
											list.add(j);
											list.add(k);
											list.add(l);
											list.add(m);
											list.add(n);

										}
									} else if ((k + l) % 10 == 7) {
										String s = ((i + j + m) % 10) + ","
												+ ((k + l) % 10);
										List list = map.get(s);

										list.add(i);
										list.add(j);
										list.add(k);
										list.add(l);
										list.add(m);
										list.add(n);

									} else if ((k + l) % 10 == 8
											|| (k + l) % 10 == 9) {
										String s = ((i + j) % 10) + ","
												+ ((k + l) % 10);
										List list = map.get(s);
										list.add(i);
										list.add(j);
										list.add(k);
										list.add(l);
										list.add(m);
										list.add(n);

									}
								} else if ((i + j) % 10 == 8
										|| (i + j) % 10 == 9) {

									String s = ((i + j) % 10) + ","
											+ ((k + l) % 10);
									List list = map.get(s);
									list.add(i);
									list.add(j);
									list.add(k);
									list.add(l);
									list.add(m);
									list.add(n);

								} else {

									if ((k + l) % 10 <= 2) {
										String s = ((i + j) % 10) + ","
												+ ((k + l + n) % 10);
										List list = map.get(s);
										list.add(i);
										list.add(j);
										list.add(k);
										list.add(l);
										list.add(m);
										list.add(n);

									} else if ((k + l) % 10 == 3) {

										String s = ((i + j) % 10) + ","
												+ ((k + l + n) % 10);
										List list = map.get(s);

										list.add(i);
										list.add(j);
										list.add(k);
										list.add(l);
										list.add(m);
										list.add(n);

									} else if ((k + l) % 10 == 4) {

										String s = ((i + j) % 10) + ","
												+ ((k + l + n) % 10);
										List list = map.get(s);

										list.add(i);
										list.add(j);
										list.add(k);
										list.add(l);
										list.add(m);
										list.add(n);

									} else if ((k + l) % 10 == 5) {
										String s = ((i + j) % 10) + ","
												+ ((k + l + n) % 10);
										List list = map.get(s);

										list.add(i);
										list.add(j);
										list.add(k);
										list.add(l);
										list.add(m);
										list.add(n);
									} else if ((k + l) % 10 == 6) {
										String s = ((i + j) % 10) + ","
												+ ((k + l) % 10);
										List list = map.get(s);

										list.add(i);
										list.add(j);
										list.add(k);
										list.add(l);
										list.add(m);
										list.add(n);

									} else if ((k + l) % 10 == 7) {
										String s = ((i + j) % 10) + ","
												+ ((k + l) % 10);
										List list = map.get(s);

										list.add(i);
										list.add(j);
										list.add(k);
										list.add(l);
										list.add(m);
										list.add(n);
									} else if ((k + l) % 10 == 8
											|| (k + l) % 10 == 9) {
										String s = ((i + j) % 10) + ","
												+ ((k + l) % 10);
										List list = map.get(s);
										list.add(i);
										list.add(j);
										list.add(k);
										list.add(l);
										list.add(m);
										list.add(n);

									}

								}
							}

						}
					}
				}
			}
		}

		int mapcount = 0;
		for (String s : map.keySet()) {
			mapcount = mapcount + map.get(s).size();
		}

		System.out.println(mapcount);
		// System.out.println(map.get("0,1").size());

		// List<Integer> all = new ArrayList<Integer>();
		// for(int i=1;i<11;i++){
		// for(int j=0;j<6;j++){
		// all.add(i);
		// }
		// }
		//
		// List<Object[]> a=MathUtil.Cfunction(all.toArray(), 6);
		//
		// for(Object[] o:a){
		// Integer[] numComb=(Integer[])o;
		//
		// }
		// int c = 0;
		//
		// for (Integer i : map.get("9,9")) {
		// c++;
		// System.out.print(i + ",");
		//
		// if (c % 6 == 0) {
		// c = 0;
		// System.out.println("");
		// }
		// }

		// int ggcount = 0;
		//
		// for (int t = 0; t < 10; t++) {
		// for (int x = 0; x < 10; x++) {
		// for (Integer i : map.get(t + "," + x)) {
		// ggcount++;
		// }
		// }
		// }
		Shoe e1 = new Shoe(6);
		int paircount=0;
		for(int y=0;y<e1.getpList().size();y++){
			for(int h=0;h<e1.getpList().size()-1;h++){
				if(e1.getpList().get(y).getNum()==e1.getpList().get(h).getNum() && y!=h){
					paircount++;
				}
			}	
		}
		int pcount=e1.getpList().size();
		int ptotal =pcount*(pcount-1);
		System.out.println("pair "+((paircount*11-(ptotal-paircount))*1.0/ptotal));
		
		for (int z = 0; z < 100; z++) {
			BigInteger finalNum = new BigInteger("0");

			BigInteger bankWinNum = new BigInteger("0");
			BigInteger playWinNum = new BigInteger("0");
			BigInteger drawNum = new BigInteger("0");

			
			for (int t = 0; t < 10; t++) {
				for (int x = 0; x < 10; x++) {
					int sfinal = 0;
					int ccount = 0;
					int num[] = new int[6];
					int mplNum[] = new int[6];
					for (Integer i : map.get(t + "," + x)) {
						num[ccount] = i;
						ccount++;
						if (ccount % 6 == 0) {

							ccount = 0;

							Shoe e = new Shoe(8);

//							for (int is = 0; is < 300; is++) {
//								e.dealRandomCard();
//							}


							
//							check(num, t, x);

							mplNum[0] = cardNumCount(e, num[0]);
							e.dealSpeicalCard(num[0]);
							mplNum[1] = cardNumCount(e, num[1]);
							e.dealSpeicalCard(num[1]);
							mplNum[2] = cardNumCount(e, num[2]);
							e.dealSpeicalCard(num[2]);
							mplNum[3] = cardNumCount(e, num[3]);
							e.dealSpeicalCard(num[3]);
							mplNum[4] = cardNumCount(e, num[4]);
							e.dealSpeicalCard(num[4]);
							mplNum[5] = cardNumCount(e, num[5]);
							e.dealSpeicalCard(num[5]);
							BigInteger bn = bigIntegerMultiply(mplNum);
							finalNum = finalNum.add(bn);
							if (x > t) {
								bankWinNum = bankWinNum.add(bn);
							} else if (x == t) {
								drawNum = drawNum.add(bn);
							} else {
								playWinNum = playWinNum.add(bn);
							}
						}
					}

				}
			}

			System.out.println("bw "
					+ (bankWinNum.doubleValue() * 0.95 - playWinNum
							.doubleValue())
					/ (bankWinNum.doubleValue() + playWinNum.doubleValue()));

			System.out
					.println("dr "
							+ (drawNum.doubleValue() * 8
									- playWinNum.doubleValue() - bankWinNum
										.doubleValue())
							/ finalNum.doubleValue());

			System.out.println("pl "
					+ (playWinNum.doubleValue() - bankWinNum.doubleValue())
					/ (bankWinNum.doubleValue() + playWinNum.doubleValue()));
		}
		int ii[] = { 52 * 6, 52 * 6 - 1, 52 * 6 - 2, 52 * 6 - 3, 52 * 6 - 4,
				52 * 6 - 5 };
		System.out.println(bigIntegerMultiply(ii));

	}

	public static int NatureEightPointCombo(Shoe e) {
		int[] numcount = cardNumCount(e);
		int count = 0;
		for (int i = 0; i < 10; i++) {
			if (6 - i < 0) {
				if (i == 16 - i) {
					count = count + (numcount[i] * (numcount[16 - i] - 1));
				} else {
					count = count + (numcount[i] * numcount[16 - i]);
				}
			} else {
				if (i == 6 - i) {
					count = count + (numcount[i] * (numcount[6 - i] - 1));
				} else {
					count = count + (numcount[i] * numcount[6 - i]);
				}
			}
		}
		return count;

	}

	public static int[] cardNumCount(Shoe e) {
		int[] numbcount = new int[10];

		for (int i = 0; i < 10; i++) {
			numbcount[i] = 0;
		}
		for (P p : e.getpList()) {
			for (int i = 0; i < 10; i++) {
				if (p.getNum() == i) {
					numbcount[i] = numbcount[i] + 1;
					break;
				} else if (p.getNum() >= 10) {
					numbcount[0] = numbcount[0] + 1;
					break;
				}
			}
		}

		return numbcount;
	}

	public static int cardNumCount(Shoe e, int num) {
		int count = 0;

		if (num == 10) {
			for (P p : e.getpList()) {
				if (p.getNum() >= 10) {
					count++;
				}
			}

		} else {
			for (P p : e.getpList()) {
				if (p.getNum() == num) {
					count++;
				}
			}

		}

		return count;
	}

	public static BigInteger c(int m, int n) {
		BigInteger count = new BigInteger("1");
		for (int i = m; i > m - n; i--) {
			count = count.multiply(new BigInteger(String.valueOf(i)));
		}
		return count;
	}

	public static BigInteger bigIntegerMultiply(int[] m) {
		BigInteger count = new BigInteger("1");
		for (int n : m) {
			count = count.multiply(new BigInteger(String.valueOf(n)));

		}
		return count;
	}
}
